package com.springboot.controller;

import java.math.BigDecimal;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.springboot.po.Coupon;
import com.springboot.po.Orders;
import com.springboot.po.UserCoupon;
import com.springboot.service.UserCouponService;

import util.UserCouponUtil;

@RequestMapping("/UserCouponController")
@RestController
public class UserCouponController {
	@Autowired
	UserCouponService userCouponService;
	
	@RequestMapping("/listUserCoupon")
	public List<Integer> listUserCoupon(String userId) throws Exception{
		//根据用户id请求所持有优惠券typeId列表,'使用优惠券界面'使用
		return userCouponService.listUserCoupon(userId);
	}
	
	@RequestMapping("/listUserCouponAll")
	public List<UserCoupon> listUserCouponAll(String userId) throws Exception{
		//获取用户所拥有的所有优惠卷的信息
		List<UserCoupon> list =  userCouponService.listUserCouponAll(userId);
		int label[] = {0 , 0 , 0 , 0 , 0 ,0 , 0 , 0 , 0 , 0 };
		//检查有没有不存在的优惠券，过滤null结果
		for(UserCoupon u : list) {
			int typeId = u.getTypeId();
			if(label[typeId-1] == 0) {
				label[typeId-1] = 1;
			}
		}
		for(int a : label) {
			if(a == 0) {
				UserCoupon userCoupon = UserCouponUtil.filterNull(a+1, userId);
				list.add(userCoupon);
			};
		}
		return list;
		
	}
	
	//先显示能够使用的券，有的话再调用下面的使用
	@RequestMapping("/listUserCouponByOrderTotal")
	public List<UserCoupon> listUserCouponByOrderTotal(String userId , BigDecimal orderTotal) throws Exception{
		//根据用户id请求以及订单金额显示可以使用的优惠券
		return userCouponService.listUserCouponByOrderTotal(userId , orderTotal);
	}
	
	//先显示能够使用的券，有的话再调用下面的使用
	@RequestMapping("/hasUserCoupon")
	public Integer hasUserCoupon(String userId , BigDecimal orderTotal) throws Exception{
		//根据用户id请求以及订单金额显示可以使用的优惠券
		return userCouponService.hasUserCoupon(userId , orderTotal);
	}
		

		
	//这个方法只是计算优惠的订单价格而不是真正使用，使用优惠券在orderState那里（并且会删除优惠券）
	@RequestMapping("/useCoupon")
	public BigDecimal useCoupon(Integer typeId , Integer orderId) throws Exception{
		//订单生成之后就会出现Id（createOrder返回值就是id）
		//只用于返回订单价格更新，支付之后才删除优惠券
		return userCouponService.useCoupon(typeId, orderId);
	}
	
	@RequestMapping("/getUserCouponQuantity")
	public Integer getUserCouponQuantity(Integer typeId , String userId) throws Exception{
		//获取某个用户的某个优惠券的数量
		return userCouponService.getUserCouponQuantity(userId,typeId);
	}
	
	@RequestMapping("/saveUserCoupon")
	public Integer saveUserCoupon(String userId,Integer typeId) throws Exception{
		//购买优惠卷，输入用户编号和优惠券编号
		return userCouponService.saveUserCoupon(userId, typeId);
	}
	
	
	
}
